package com.cskaoyan.javase.oop1._15import.one;

import java.util.Scanner;
// import com.cskaoyan.javase.oop1._15import.another.Student;

/**
 * 请按照以下步骤创建需要的类：
 * 在包名为one的包中创建一个public class Student和测试类public class Demo
 * 在包名为another的包中创建一个public class Student和public class Teacher
 * 在同名的Student类中给出同名的方法test，并给出不同的实现
 * 创建完毕后，开始进行测试工作
 *
 * 当你在代码中使用某个类时，实际上编译器会对这个类进行语法检查
 * 如果能够找到这个类就不会编译报错，否则就会编译报错
 *
 * 从上述案例中，我们可以总结一下编译器在查找并决定使用某个class时，它的搜索机制：
 *      1.在同包下时，类名是绝对唯一的，有就有，没有就没有，不存在选择的问题。
 *          这时，编译器是可以直接通过一个类名去查找到一个类的，不需要任何额外操作
 *          这可以看成一种"就近原则"，同包已经存在这个类了，自然不需要去外面找。
 *          同包下可以直接写简单类名寻找一个类。
 *      2.在不同包下，类名不是唯一的，不同包下完全可能出现同名类
 *          这时如果仍然写简单类名，编译器是不知道究竟使用哪个类的
 *          这时就有两种解决方案：
 *              1.导包（推荐）
 *                  语法：
 *                  import 全限定类名;
 *                  全限定类名用于精确指明一个类。
 *                  注：导包语句应该package声明的下面，其它代码的上面。
 *                      一般来说导包语句就直接紧跟package声明就可以了
 *                      而且idea具有自动导包的功能，程序员一般不需要关心导包语句。但是注意不要导错包。
 *              2.不用简单类名使用类，而是用全限定类名使用一个类。（不推荐，除非迫不得已）
 *
 * 注意事项：
 *      1.import导包语句应该放在package声明之后，有效代码之前。
 *          正常情况下，我们使用某个类时，IDEA会自动导包，不用太关心这条语句的位置。
 *          一般只需要注意不要用IDEA导错包就可以了。
 *      2.像String、System、Math等常用类很明显不是同包下的类，但我们并没有进行导包操作。
 *      这是因为在Java当中的，"java.lang包"是Java的核心类包，具有隐式的导包！
 *      注意"java.lang包"下的所有类，是隐式的导入了每个Java类，而不是没有导入！
 *
 *      3.极少数情况下，开发中可能出现这种情况：
 *           需要在一个类中同时使用两个同名类
 *           这时就可以考虑使用全限定类名来使用其中一个类了。
 *           当然如果是自己写的代码出现了这种情况，那尽量还是改名字。
 *
 * @since 10:45
 * @author wuguidong@cskaoyan.onaliyun.com
 */

public class Demo {
    public static void main(String[] args) {
        /*Student s = new Student();
        s.test();*/

        /*com.cskaoyan.javase.oop1._15import.another.Student
                s = new com.cskaoyan.javase.oop1._15import.another.Student();
        s.test();*/

        // 需求：同时输出one包和another包下的Student
        Student s = new Student();
        s.test();

        com.cskaoyan.javase.oop1._15import.another.Student s2 = new com.cskaoyan.javase.oop1._15import.another.Student();
        s2.test();
    }
}
